import { ExcalidrawElement } from '../element/types'
import { AppState, BinaryFiles } from '../types'
import { exportCanvas } from '.'
import { getNonDeletedElements } from '../element'
import { getFileHandleType, isImageFileHandleType } from './blob'

export const resaveAsImageWithScene = async (
  elements: readonly ExcalidrawElement[],
  appState: AppState,
  files: BinaryFiles,
) => {
  const { exportBackground, viewBackgroundColor, name, fileHandle } = appState

  const fileHandleType = getFileHandleType(fileHandle)

  if (!fileHandle || !isImageFileHandleType(fileHandleType)) {
    throw new Error(
      'fileHandle should exist and should be of type svg or png when resaving',
    )
  }
  appState = {
    ...appState,
    exportEmbedScene: true,
  }

  await exportCanvas(
    fileHandleType,
    getNonDeletedElements(elements),
    appState,
    files,
    {
      exportBackground,
      viewBackgroundColor,
      name,
      fileHandle,
    },
  )

  return { fileHandle }
}
